package com.juma.cartridge.common;

/**
 * 重试工具类
 * @ClassName RetryUtils
 * @Description
 * @Author zhuangguangyou
 * @Date 2019年11月19日 上午9:56:57
 * @Version 1.0
 *
 */
public class RetryUtils {

    /**
     * 执行需要重试的函数体
     * @param executor 执行的函数体
     * @param maxRetryTimes 最大重试次数 
     * @param intervalMillsec 每次重试的间隔
     * @return
     */
    public static <R> R retry(RetryExecutor<R> executor,int maxRetryTimes,long intervalMillsec) {
        
        R result = null;
        for (int i=0;i<maxRetryTimes;i++) {
            
            try {
                result = executor.execute();    
            }catch(Exception e) {
                result = null;
            }
            if(result!=null) {
                break;
            }
            if(intervalMillsec<10) {
                continue;
            }
            try {
                Thread.sleep(intervalMillsec);    
            }catch(InterruptedException ie) {
                break;
            }
        }
        return result;
    }
    
}
